<?php
class EditUserForm extends sfGuardUserForm
{
  function configure()
  {
    parent::configure();
    
    unset(
      $this['last_login'],
      $this['created_at'],
      $this['updated_at'],
      $this['salt'],
      $this['algorithm'],
      $this['is_active']
    );
    
    $this->setWidget('username', new sfWidgetFormInput(
      array(), array('maxlength' => 16)
    ));    

    $this->setWidget('password', new sfWidgetFormInputPassword(
      array(), array('maxlength' => 128)
    ));    

    $this->setWidget('password2', new sfWidgetFormInputPassword(
      array(), array('maxlength' => 128)
    ));
    
    
    
    $this->setValidator('username',
      new sfValidatorAnd(array(
        new sfValidatorString(array(
          'required' => true,
          'trim' => true,
          'min_length' => 3,
          'max_length' => 16
        )),
        // Usernames should be safe to output without escaping and generally username-like.
        new sfValidatorRegex(array(
          'pattern' => '/^[\pL\pN_\s]+$/u'
        ), array('invalid' => 'Логин может содержать только буквы латинского алфавита, цифры и знак подчеркивания')),
      ))
    );
    
    $this->validatorSchema->setPostValidator(
      new sfValidatorDoctrineUnique(array('model' => 'sfGuardUser', 'column' => array('username')),
      array('invalid' => 'Пользователь с таким логином уже существует.'))
    );
    
    
    // Passwords are never printed - ever - except in the context of Symfony form validation which has built-in escaping.
    // So we don't need a regex here to limit what is allowed
    
    // Don't print passwords when complaining about inadequate length
    $this->setValidator('password', new sfValidatorString(array(
      'required' => false,
      'trim' => true,
      'min_length' => 5,
      'max_length' => 128
    ), array(
      'min_length' => 'Пароль слишком короткий. Он должен быть хотя бы %min_length% символов.')));
        
    $this->setValidator('password2', new sfValidatorString(array(
      'required' => false,
      'trim' => true,
      'min_length' => 5,
      'max_length' => 128
    ), array(
      'min_length' => 'Пароль слишком короткий. Он должен быть хотя бы %min_length% символов.')));

     
    $schema = $this->validatorSchema;
    
    // Hey Fabien, adding more postvalidators is kinda verbose!
    $postValidator = $schema->getPostValidator();
    
    $postValidators = array(
      new sfValidatorSchemaCompare(
        'password',
        sfValidatorSchemaCompare::EQUAL,
        'password2',
        array(),
        array('invalid' => 'Пароли не совпадают.')
      )      
    );
    
    if ($postValidator)
    {
      $postValidators[] = $postValidator;
    }
    
    $this->validatorSchema->setPostValidator(new sfValidatorAnd($postValidators));
    
    
    $this->widgetSchema->setLabels(array(
      'password'=>'Пароль',
      'password2'=>'Пароль еще раз',
      'profile'=>'Профиль',
      'username'=>'Логин',
    ));
    
    
    
  }
  
  
}
